﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DBUtils;

/// <summary>
/// 该页面对应着功能说明书的审核加班页
/// </summary>
public partial class CheckOverTime_DefaultCheck : System.Web.UI.Page
{
    DataSet ds;//存放数据信息

    /// <summary>
    /// 网页初始化时执行该方法。设置控件属性，获取员工编号信息和员工其他信息，并调用 RefreshPage 方法。
    /// 该过程调用 Employee.GetEmployeeInfo(iEmpID, emp) 函数，从数据库中获取员工的其他信息。
    /// 该过程调用 RefreshPage() 函数，在页面上显示所有要审核的记录。
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
        //是否有权限
        bool isAdmin = true;

        if (isAdmin)//如果有权限
        {
            RefreshPage();
        }
        else//如果没有权限
        {
        }
        Panel2.Visible = false;
    }

    /// <summary>
    /// 当用户选中 DataGrid 中的其他记录时，该方法将隐藏加班详细信息区域和否决理由区域。
    /// 该过程调用 CheckOTReq.ChangeOTStatus(iOTID, "已批准") 函数，将审批操作保存到数据库中。？？？
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void grdResult_SelectedIndexChanged(object sender, EventArgs e)
    {
        int i = grdResult.SelectedIndex;
        DataSet ds1 = new DataSet();
        if (CheckOTReq.QuerySubmittedReq(Convert.ToInt32(Session["EmployeeID"]), ref ds1) == 1)//如果操作数据库成功
        {
            this.lblReason.Text = ds1.Tables[0].Rows[i][6].ToString();
        }
        else
        {
            this.Response.Write("<script>alert('" + "查询信息失败" + "');</script>");//弹出失败信息
        }
        Panel1.Visible = true;

    }

    /// <summary>
    /// 当用户单击 DataGrid 中的按钮或链接时，该方法解析用户的操作（单击“加班事由”链接、“否决”按钮或“批准”按钮）并做相应处理。
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void grdResult_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Agree")//如果同意请假
        {
            if (CheckOTReq.ChangeOTStatus(Convert.ToInt32(ds.Tables[0].Rows[grdResult.SelectedIndex][0]), "已批准", "") == 1)
            {
                this.Response.Write("<script>alert('" + "批准成功" + "');</script>");//弹出信息
                Page_Load(sender, e);
            }
        }
        else if (e.CommandName == "Deny")//如果拒绝请假
        {
            Panel2.Visible = true;
        }
    }

    /// <summary>
    /// 当用户单击“确定”按钮时，该方法将该在数据库中更改加班记录的状态并保存否决理由。
    /// 该过程调用 CheckOTReq.ChangeOTStatus(CInt(lblOTID.Text), "已否决", strDenyReason) 函数，在数据库中更改加班记录的状态并保存否决理由。
    /// 该过程调用 RefreshPage() 函数，刷新网页显示。
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnOK_Click(object sender, EventArgs e)
    {
        if (txtDenyReason.Text.Trim().Length == 0)
        {
            Label2.Visible = true;
            return;
        }
        if (CheckOTReq.ChangeOTStatus(Convert.ToInt32(ds.Tables[0].Rows[grdResult.SelectedIndex][0]), "已否决", txtDenyReason.Text) == 1)
        {
            this.Response.Write("<script>alert('" + "否决成功" + "');</script>");//弹出信息
            Page_Load(sender, e);

        }
    }

    /// <summary>
    /// 该方法将在数据库中查找登录者要审核的所有加班记录，并以 DataGrid 的形式来显示返回结果。
    /// 该过程调用 QuerySubmittedReq(iApproverID, dsResult) 函数，在数据库中查找登录者要审核的所有加班记录。
    /// </summary>
    public void RefreshPage()
    {
        ds = new DataSet();
        if (CheckOTReq.QuerySubmittedReq(Convert.ToInt32(Session["EmployeeID"]), ref ds) == 1)//如果操作数据库成功
        {
            if (ds.Tables[0].Rows.Count == 0)
            {
                Label2.Text = "没有等待审批的纪录";
                Label2.Visible = true;
                return;
            }
            grdResult.DataSource = ds.Tables[0];
            grdResult.DataBind();
            grdResult.Visible = true;
        }
        else
        {
            this.Response.Write("<script>alert('" + "查询信息失败" + "');</script>");//弹出失败信息
        }
    }

    /// <summary>
    /// 当用户单击“取消”按钮时，该方法将隐藏否决理由区域。
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        Panel2.Visible = false;
    }
}
